home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 23
/
AMIGAplus Sonderheft 23 (2000)(Falke)(DE)[!].iso
/
Updates
/
Hardware
/
BlizKick
/
BKGUI.e
< prev
next >
Wrap
Text File
|
1999-11-06
|
15KB
|
617 lines
-> FILE: ESrc:Own/BKGUI.e REV: 521 --- BlizKick GUI
/* History
*/
OPT OSVERSION=37, PREPROCESS
MODULE 'tools/EasyGUI', 'tools/exceptions', 'amigalib/lists', 'utility',
'gadtools', 'libraries/gadtools', 'exec/lists', 'exec/nodes',
'dos/dos', 'dos/exall', 'dos/dosextens'
MODULE 'intuition/intuition','intuition/sghooks'
-> dirwalker flags
ENUM DWF_RECURSIVE=1, DWF_NOSOFT=2, DWF_NOHARD=4
ENUM ERR_NONE, ERR_NEW, ERR_STR, ERR_LOCK, ERR_ADO, ERR_NODE, ERR_LIB, ERR_PATT,
ERR_OK, ERR_CANCEL, ERR_BREAK
RAISE ERR_NEW IF New()=NIL,
ERR_STR IF String()=NIL,
ERR_LOCK IF Lock()=NIL,
ERR_BREAK IF CtrlC()=TRUE,
-> ERR_ADO IF AllocDosObject()=NIL,
ERR_LIB IF OpenLibrary()=NIL
-> ERR_PATT IF ParsePatternNoCase()=-1
CONST BUF_SIZE=1024, FILENAME_SIZE=300
CONST PATTERNBUFF_SIZE=FILENAME_SIZE*2+2
ENUM DIR_NODE, POS_NODE, VOL_NODE, ASN_NODE, FILE_NODE, MAX_TYPE
CONST DIRSTRLEN=6
DEF pathStr[FILENAME_SIZE]:STRING, currPath[FILENAME_SIZE]:STRING,
fileStr[FILENAME_SIZE]:STRING, patternStr[FILENAME_SIZE]:STRING,
patternBuff[PATTERNBUFF_SIZE]:ARRAY
DEF listGad1, listGad2, listGad3, txtGad1, txtGad2, secs, micros,
nameList1=NIL:PTR TO lh, nameList2=NIL:PTR TO lh, nameList3=NIL:PTR TO lh,
posList=NIL:PTR TO lh, txtGadc, txtGvt, txtGv
DEF f_force,f_localfast,f_quickboot,f_speedrom,f_hogwaitblit,
oldSel1=-1, oldSel2=-1, oldSel3=-1
DEF gh=NIL:PTR TO guihandle
DEF ksList=NIL:PTR TO lh,modList=NIL:PTR TO lh
OBJECT mynode
succ:PTR TO mynode
pred:PTR TO mynode
type:CHAR
pri:CHAR
name:PTR TO CHAR
userptr:LONG
ENDOBJECT
OBJECT module
filename:PTR TO CHAR
enable:CHAR
ENDOBJECT
OBJECT kickstart
filename:PTR TO CHAR
version:INT
revision:INT
size:LONG
ENDOBJECT
OBJECT setdata
kickstart:PTR TO mynode -> (kickstart)
modules:lh -> list of mynode (module)
switches:LONG
ENDOBJECT
/* saved set
[SetName]
kickstart=DEVS:rom40068
module=MoveVBR
module=Preparemul
module=SoftSCSI
switches=$1
*/
PROC main() HANDLE
DEF here=NIL
utilitybase:=OpenLibrary('utility.library', 37)
gadtoolsbase:=OpenLibrary('gadtools.library', 37)
NEW nameList1, nameList2, nameList3
newList(nameList1)
newList(nameList2)
newList(nameList3)
addNode(nameList1, 'set1', 0, 0)
addNode(nameList1, 'set2', 0, 0)
addNode(nameList1, 'set3', 0, 0)
/*
addNode(nameList2, '34.5 256k', 0, 0)
addNode(nameList2, '39.106 512k', 0, 0)
addNode(nameList2, '40.68 512k', 0, 0)
addNode(nameList3, '· SoftSCSI', 0, 0)
addNode(nameList3, '· PrepareEmul', 0, 0)
addNode(nameList3, ' Hackdisk', 0, 0)
*/
getksList()
getmodList()
gui()
EXCEPT DO
IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
IF utilitybase THEN CloseLibrary(utilitybase)
SELECT exception
CASE ERR_OK
PrintF('All ok\n')
CASE ERR_CANCEL
WriteF('Cancel\n')
DEFAULT
report_exception()
ENDSELECT
ENDPROC
PROC getksList() HANDLE
NEW ksList
newList(ksList)
dirwalker('DEVS:',DWF_RECURSIVE,{getksl_hook})
EXCEPT DO
ReThrow()
ENDPROC
PROC getksl_hook(fib:PTR TO fileinfoblock,data)
IF fib.entrytype<0
IF fib.size AND ((fib.size AND $3FFFF)=0) AND (fib.size<=$80000)
IF isKickfile(fib.filename)
addNodeSort(nameList2, fib.filename, 0, 0)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC isKickfile(name:PTR TO CHAR)
DEF buf[2]:ARRAY OF LONG,fh,got
IF (fh:=Open(name,MODE_OLDFILE))
got:=(Fread(fh,buf,8,1)=1)
Close(fh)
IF got AND ((buf[] AND $FFF8FFFF)=$11104EF9) AND (Shr(buf[1]+FileLength(name),16)=$0100) THEN RETURN TRUE
ENDIF
ENDPROC FALSE
PROC getmodList() HANDLE
NEW modList
newList(modList)
dirwalker('DEVS:Modules/',0,{getmodl_hook})
EXCEPT DO
ReThrow()
ENDPROC
PROC getmodl_hook(fib:PTR TO fileinfoblock,data)
DEF buf[64]:STRING
IF fib.entrytype<0
IF isModulefile(fib.filename)
StringF(buf,' \s',fib.filename)
addNodeSort(nameList3, buf, 0, 0)
ENDIF
ENDIF
ENDPROC
PROC isModulefile(name:PTR TO CHAR)
DEF sl,buf[2]:ARRAY OF LONG
IF (sl:=LoadSeg(name))
CopyMem(Shl(sl,2)+4,buf,8)
UnLoadSeg(sl)
IF buf[]=$707A4E75 THEN RETURN TRUE
ENDIF
ENDPROC FALSE
/*
DW00 - locking of directory failed
DW01 - AllocDosObject(FIB) failed
DW02 - Examine() failed
DW03 - ExNext() failed
*/
PROC dirwalker(dirname,flags,hookfunc,userdata=NIL) HANDLE
DEF dirlock=NIL,fib=NIL:PTR TO fileinfoblock,state,olddir=-1
IF (dirlock:=Lock(dirname, ACCESS_READ))=NIL THEN Raise("DW00")
IF (fib:=AllocDosObject(DOS_FIB,NIL))=NIL THEN Raise("DW01")
IF Examine(dirlock,fib)=NIL THEN Raise("DW02")
olddir:=CurrentDir(dirlock)
SetIoErr(0)
WHILE ExNext(dirlock,fib)
state:=hookfunc(fib,userdata)
EXIT state<0
IF flags AND DWF_RECURSIVE
IF (fib.entrytype=ST_SOFTLINK) AND (flags AND DWF_NOSOFT)
state:=0
ELSEIF (fib.entrytype=ST_LINKDIR) AND (flags AND DWF_NOHARD)
state:=0
ENDIF
IF state AND (fib.entrytype>=0)
dirwalker(fib.filename,flags,hookfunc,userdata)
ENDIF
ENDIF
ENDWHILE
IF (IoErr()<>ERROR_NO_MORE_ENTRIES) AND (state>=0) THEN Raise("DW03")
EXCEPT DO
IF olddir<>-1 THEN CurrentDir(olddir)
IF fib THEN FreeDosObject(DOS_FIB,fib)
IF dirlock THEN UnLock(dirlock)
ReThrow()
ENDPROC
-> GUI definition
CONST SETLIST_W=10, KSLIST_W=8, MODLIST_W=9, LIST_H=10
CONST SETSTR_MAX=16, KSSTR_MAX=16, MODSTR_MAX=16
PROC gui_init(in_gh)
DEF tfile[32]:STRING, cmd[64]:STRING, verstr[256]:STRING, fh, f=FALSE
gh:=in_gh -> SET GLOBAL gh!!
->makeinvstr(strGad1)
->makeinvstr(strGad2)
->activategad(strGad2,gh.wnd)
->setgadgetattrs(txtGadc,[GTTX_JUSTIFICATION,GTJ_CENTER,NIL])
StringF(tfile,'T:BKGuiTmp.\h',FindTask(NIL))
StringF(cmd,'Version >\s `WHICH BlizKick` FILE FULL',tfile)
IF SystemTagList(cmd,NIL)=0
IF (fh:=Open(tfile,OLDFILE))
IF Fgets(fh,verstr,256)
IF StrLen(verstr)>0 THEN IF verstr[StrLen(verstr)-1]=10 THEN verstr[StrLen(verstr)-1]:=0
SetStr(verstr,StrLen(verstr))
f:=TRUE
ENDIF
Close(fh)
ENDIF
ENDIF
StringF(cmd,'DELETE >NIL: \s FORCE',tfile)
SystemTagList(cmd,NIL)
IF Not(f) THEN StrCopy(verstr,'info not available')
settxt(gh, txtGvt, 'BlizKick version')
->settxt(gh, txtGv, '1.10 (xx.xx.97)')
settxt(gh, txtGv, verstr)
ENDPROC
PROC gui()
myeasygui({gui_init},'BlizKickGUI 1.0 © 1997 Harry Sintonen',
[BEVEL,
->[EQROWS,
[ROWS,
[COLS,
txtGadc:=[TEXT,'Set',NIL,FALSE,SETLIST_W],
[TEXT,'Kickstart',NIL,FALSE,KSLIST_W],
[TEXT,'Modules',NIL,FALSE,MODLIST_W],
[TEXT,'Switches',NIL,FALSE,0]
],
[COLS,
[EQROWS,
listGad1:=[LISTV,{a_list1},NIL,SETLIST_W,LIST_H-4,nameList1,0,NIL,0],
txtGad1:=[TEXT,NIL,NIL,TRUE,1],
[COLS,
[SBUTTON,{b_snew},'New'],
[SBUTTON,{b_sdel},'Del']
]
],
[EQROWS,
listGad2:=[LISTV,{a_list2},NIL,KSLIST_W,LIST_H-2,nameList2,0,NIL,0],
txtGad2:=[TEXT,NIL,NIL,TRUE,1]
],
listGad3:=[LISTV,{a_list3},NIL,MODLIST_W,LIST_H,nameList3,0,NIL,0],
[ROWS,
[BEVELR,
[EQROWS,
->[TEXT,NIL,NIL,FALSE,1],[SPACEV],
[CHECK,{c_force},'Force',f_force,FALSE],[SPACEV],
[CHECK,{c_localfast},'LocalFast',f_localfast,FALSE],[SPACEV],
[CHECK,{c_quickboot},'QuickBoot',f_quickboot,FALSE],[SPACEV],
[CHECK,{c_speedrom},'SpeedROM',f_speedrom,FALSE],[SPACEV],
[CHECK,{c_hogwaitblit},'HogWaitBlit',f_hogwaitblit,FALSE]
->[SPACEV],[TEXT,NIL,NIL,FALSE,1]
]
],
txtGvt:=[TEXT,NIL,NIL,FALSE,1],
txtGv:=[TEXT,'BlizKick 1.10 (04/01/97)',NIL,TRUE,1]
]
],
[BAR],
[COLS,
[BUTTON,{b_kick},'Kick'],
[SPACEH],
[BUTTON,{b_save},'Save settings'],
[SPACEH],
[BUTTON,{b_cancel},'Cancel']
]
]
]
)
ENDPROC
PROC settxt(gh:PTR TO guihandle, gadget, str, newmax=0) HANDLE
DEF gad:PTR TO